/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import co.com.sed.model.beans.EvaluacionEVC;
import co.com.sed.model.beans.Funcionario;
import co.com.sed.model.util.Util;

/**
 * @author MBarros
 *
 */
public class EvaluacionEVCPeer {
	
	private static final String BUSCAR_EVALUACIONESEVC =
			"SELECT id_evaluacion_evc, fecha_asig, estado, resultado_evc, evaluado, periodo_evaluado "+
			"FROM evaluacion_evc ";
	
	private static final String BUSCAR_EVALUACIONESEVC_POR_FUNCIONARIO =
			"SELECT id_evaluacion_evc, fecha_asig, estado, resultado_evc, evaluado, periodo_evaluado "+
			"FROM evaluacion_evc "+
			"WHERE evaluado = &evaluado";
	
	/*private static final String BUSCAR_EVALUACIONESEVC_POR_PERIODO =
			"SELECT id_evaluacion_evc, fecha_asig, estado, resultado_EVC, aplica_EV_Gen, evaluado, periodo_evaluado "+
			"FROM evaluacion_EVC "+
			"WHERE periodo_evaluado = &periodoEvaluado";*/
	
	private static final String BUSCAR_EVALUACIONEVC =
			"SELECT id_evaluacion_evc, fecha_asig, estado, resultado_evc, evaluado, periodo_evaluado "+
			"FROM evaluacion_evc "+
			"WHERE id_evaluacion_evc = &id_evaluacion_evc";

	private static final String INSERTAR_EVALUACIONEVC=
			"INSERT INTO evaluacion_evc(fecha_asig, estado, resultado_evc, evaluado, periodo_evaluado) VALUES "+
			"('&fecha_asig','&estado', &resultado_evc, &evaluado, &periodo_evaluado)";

	private static final String ACTUALIZAR_EVALUACIONEVC =
			"UPDATE evaluacion_evc "+
			"SET fecha_asig = '&fecha_asig', estado = '&estado', resultado_evc = &resultado_evc ,"+ 
			"evaluado = &evaluado, periodo_evaluado = &periodo_evaluado"+ 
			"WHERE id_evaluacion_evc = &id_evaluacion_evc";

	private static final String ELIMINAR_EVALUACIONEVC =
			"DELETE FROM evaluacion_evc "+
			"WHERE id_evaluacion_evc = &id_evaluacion_evc";

		/**
		 *  busca en la base de datos todos los registros de la tabla "Evaluacion_EVC"
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
		 * 
		 * @return					lista de cargos
		 * @see         				Cargo, Statement
		 */
	
	public static ArrayList<EvaluacionEVC> buscarEvaluacionesEVC(Statement stmt, int idEvaluacionEVC) {
		ArrayList<EvaluacionEVC> EvaluacionesEVC = new ArrayList<EvaluacionEVC>();
	
		String sql = BUSCAR_EVALUACIONESEVC;
	
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					EvaluacionEVC eva = new EvaluacionEVC();
					
					eva.setIdEvaluacionEVC(rs.getInt("id_evaluacion_evc"));
					eva.setEvaluado(new Funcionario (rs.getInt("evaluado")));
					eva.setPeriodoEvaluado(rs.getInt("periodo_evaluado"));
					eva.setFechaAsign(rs.getDate("fecha_asig"));
					eva.setResultadoEVC(rs.getFloat("resultado_evc"));
					eva.setEstado(rs.getBoolean("estado"));
								
					
					EvaluacionesEVC.add(eva);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}
	
		return EvaluacionesEVC;
	}
	
		/**
		 *  busca en la base de datos todos los registros de la tabla "evaluacion_360" que pertenescan a un funcionario
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
		 * 
		 * @return					lista de evaluaciones360
		 * @see        				Evaluacion360, Statement
		 */
	
	public static ArrayList<EvaluacionEVC> buscarEvaluacionesEVCPorFuncionario(Statement stmt, int evaluado) {
		ArrayList<EvaluacionEVC> evaluacionesEVC = new ArrayList<EvaluacionEVC>();
	
		String sql = BUSCAR_EVALUACIONESEVC_POR_FUNCIONARIO;
	
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					EvaluacionEVC eva = new EvaluacionEVC();
					
					eva.setIdEvaluacionEVC(rs.getInt("id_evaluacion_evc"));
					eva.setFechaAsign(rs.getDate("fecha_asig"));
					eva.setEstado(rs.getBoolean("estado"));
					eva.setResultadoEVC(rs.getFloat("resultado_evc"));
					eva.setEvaluado(new Funcionario (rs.getInt("evaluado")));
					eva.setPeriodoEvaluado(rs.getInt("periodo_evaluado"));
								
					
					evaluacionesEVC.add(eva);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}
	
		return evaluacionesEVC;
	}
	
		/**
		 *  busca en la base de datos todos los registros de la tabla "evaluacion_360" que pertenescan a un periodo
		 * 
		 * @param stmt			referencia al Statement, pasado por DataManager para realizar la consulta
		 * 
		 * @return				lista de evaluaciones360
		 * @see        			Evaluacion360, Statement
		 */
	
	/*public static ArrayList<EvaluacionEVC> buscarEvaluacionesEVCPorPeriodo(Statement stmt, int idPeriodo) {
		ArrayList<EvaluacionEVC> evaluacionesEVC = new ArrayList<EvaluacionEVC>();
	
		String sql = BUSCAR_EVALUACIONESEVC_POR_PERIODO;
		
		// se setean los "parametros"
		sql = sql.replaceAll("&periodoEvaluado", "" + idPeriodo);
	
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					EvaluacionEVC eva = new EvaluacionEVC();
					
					eva.setIdEvaluacionEVC(rs.getInt("id_evaluacion_evc"));
					eva.setFechaAsign(rs.getDate("fecha_asig"));
					eva.setEstado(rs.getBoolean("estado"));
					eva.setResultadoEVC(rs.getFloat("reultado_EVC"));
					eva.setAplicaEVGen(rs.getBoolean("aplica_EV_GEN"));
					eva.setEvaluado(new Funcionario (rs.getInt("identificacion")));
					eva.setPeriodoEvaluado(rs.getInt("periodo_evaluado"));
								
					
					evaluacionesEVC.add(eva);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}
	
		return evaluacionesEVC;
	}

*/		/**
		 *  busca en la base de datos un registro de la tabla "Evaluacion_EVC"
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para realizar la consulta
		 * @param Evaluacion_EVC		id de la Evaluacion_EVC que se desea cosultar
		 * 
		 * @return					Evaluacion_EVC buscado
		 * @see         				Evaluacion_EVC, Statement
		 */
	
	public static EvaluacionEVC buscarEvaluacionEVC(Statement stmt, int idEvaluacionEVC) {
		EvaluacionEVC eva = new EvaluacionEVC();
	
		String sql = BUSCAR_EVALUACIONEVC;
		
		// se setean los "parametros"
		sql = sql.replaceAll("&id_evaluacion_evc", ""+ idEvaluacionEVC);
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
					eva.setIdEvaluacionEVC(rs.getInt("id_evaluacion_evc"));
					eva.setEvaluado(new Funcionario (rs.getInt("evaluado")));
					eva.setPeriodoEvaluado(rs.getInt("periodo_evaluado"));
					eva.setFechaAsign(rs.getDate("fecha_asig"));
					eva.setResultadoEVC(rs.getFloat("resultado_evc"));
					eva.setEstado(rs.getBoolean("estado"));
					
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}
	
		return eva;
	}

		/**
		 *  Inserta un Tipo de Evaluacion_EVC en la base de datos
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
		 * @param Evaluacion_EVC	Evaluacion_EVC que se va a insertar en la base de datos
		 * 
		 * @return					void
		 * @throws SQLException		si ocurre un error al insertar el registro en la base de datos
		 * 
		 * @see         			DataManager
		 */
	
	public static int insertarEvaluacionEVC(Statement stmt, EvaluacionEVC evaluacionEVC) throws SQLException {
		int idNuevaEvaluacionEVC = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_EVALUACIONEVC;
			 //se setean los "parametros": &id_calificacion, &cualitativa, &cuantitativa, &descripcion 
			sql = sql.replaceAll("&fecha_asig", "" + evaluacionEVC.getFechaAsign())	
					 .replaceAll("&estado", ""+ evaluacionEVC.getEstado())
					 .replaceAll("&resultado_evc", ""+ evaluacionEVC.getResultadoEVC())
					 .replaceAll("&evaluado", ""+ evaluacionEVC.getEvaluado().getIdFuncionario())				 
					 .replaceAll("&periodo_evaluado",  ""+ evaluacionEVC.getPeriodoEvaluado());
			
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevaEvaluacionEVC = rs.getInt("id_evaluacion_evc");
				Util.print("nuevo registro: " + idNuevaEvaluacionEVC);
			}
		}catch (Exception e) {
			Util.print(" > " + e.getMessage());
		
		} finally {
			rs.close();
		}
		
		return idNuevaEvaluacionEVC;
	}

	
	
		/**
		 *  Actualiza un evaluacionEVC en la base de datos
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
		 * @param evaluacionEVC		evaluacionEVC que se va a actualizar en la base de datos
		 * 
		 * @return					void
		 * @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
		 * 
		 * @see         			DataManager
		 */
	
	public static void actualizarEvaluacionEVC(Statement stmt, EvaluacionEVC evaluacionEVC) throws SQLException {
		String sql = ACTUALIZAR_EVALUACIONEVC;
		// se setean los "parametros": &id_evaluacion_evc, '&fecha_asig', '&estado', '&resultado_EVC', '&aplica_EV_Gen', &evaluado, &periodo_evaluado
		sql = sql.replaceAll("&id_evaluacion_evc", ""+ evaluacionEVC.getIdEvaluacionEVC())
				 .replaceAll("&fecha_asig", ""+ evaluacionEVC.getFechaAsign())	
				 .replaceAll("&estado", ""+ evaluacionEVC.getEstado())
				 .replaceAll("&resultado_evc", ""+ evaluacionEVC.getResultadoEVC())
				 .replaceAll("&identificacion", ""+ evaluacionEVC.getEvaluado().getIdentificacion())				 
				 .replaceAll("&periodo_evaluado",  ""+ evaluacionEVC.getPeriodoEvaluado());
		
		stmt.executeUpdate(sql);
	}

		/**
		 *  Elimina un evaluacionEVC en la base de datos
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
		 * @param evaluacionEVC		evaluacionEVC que se va a eliminar en la base de datos
		 * 
		 * @return					void
		 * @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
		 * 
		 * @see         			DataManager
		 */
	
	public static void eliminarEvaluacionEVC(Statement stmt, EvaluacionEVC evaluacionEVC) throws SQLException {
		String sql = ELIMINAR_EVALUACIONEVC;
		// se setean los "parametros": &id_evaluacion_evc
		sql = sql.replaceAll("&id_evaluacion_evc", "" + evaluacionEVC.getIdEvaluacionEVC());
	
		stmt.executeUpdate(sql);
	}

}
